package com.ld.poetry.utils.storage;

import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class QiUtil {

        //设置好账号的ACCESS_KEY和SECRET_KEY
        String ACCESS_KEY = "-UOgmToJKrsiGwG60rQR5o1wtQB-Wj57VH9Pm2CY"; //这两个登录七牛 账号里面可以找到
        String SECRET_KEY = "5bvCgEf34PGTir3MjUVz3PXBgP6wRU2bN45zWplE";
        //要上传的空间
        String bucketname = "poetize-test"; //对应要上传到七牛上 你的那个路径（自己建文件夹 注意设置私有）
        //上传到七牛后保存的文件名
        //密钥配置
        Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
        //构造一个带指定 Region 对象的配置类
        //构造一个带指定 Region 对象的配置类
      //...其他参数参考类注释
        Configuration cfg = new Configuration(Zone.zone2());
        UploadManager uploadManager = new UploadManager(cfg);


        /**
         * 简单上传，使用默认策略，只需要设置上传的空间名就可以了
         *
         * @param fileName 文件上传至七牛云空间的名称
         * @return
         */
        public String getUpToken(String fileName) {
            //return auth.uploadToken(bucketname);
            //<bucket>:<key>，表示只允许用户上传指定key的文件。在这种格式下文件默认允许“修改”，已存在同名资源则会被本次覆盖。
            //如果希望只能上传指定key的文件，并且不允许修改，那么可以将下面的 insertOnly 属性值设为 1。
            //第三个参数是token的过期时间
            return auth.uploadToken(bucketname, fileName, 3600, new StringMap().put("insertOnly", 0));
        }


        /**
         * 普通上传
         *
         * @param filePath 文件路径
         * @param fileName 文件上传至七牛云空间的名称
         * @throws IOException
         */
        public void upload(String filePath, String fileName) {
            try {
                //调用put方法上传
                Response res = uploadManager.put(filePath, fileName, getUpToken(fileName));
                //打印返回的信息
                System.out.println(res.bodyString());
            } catch (QiniuException e) {
                Response r = e.response;
                // 请求失败时打印的异常的信息
                System.out.println(r.toString());
                try {
                    //响应的文本信息
                    System.out.println(r.bodyString());
                } catch (QiniuException e1) {
                    //ignore
                    e.printStackTrace();
                }
            }
        }

        /**
         * 获取下载文件路径，即：donwloadUrl
         *
         * @return
         */
        public String getDownloadUrl(String targetUrl) {
            String downloadUrl = auth.privateDownloadUrl(targetUrl);
            return downloadUrl;
        }





        /**
         * 读取字节输入流内容
         *
         * @param is
         * @return
         */
        private static byte[] readInputStream(InputStream is) {
            ByteArrayOutputStream writer = new ByteArrayOutputStream();
            byte[] buff = new byte[1024 * 2];
            int len = 0;
            try {
                while ((len = is.read(buff)) != -1) {
                    writer.write(buff, 0, len);
                }
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return writer.toByteArray();
        }

        public static void main(String args[]) throws IOException {
            String fileName = "userAvatar/idea.jpg";
            //上传文件的路径
            String FilePath = "E:\\idea背景图.jpg";  //本地要上传文件路径
            // new QiniuUtil().upload(FilePath,fileName);

            //构造私有空间的需要生成的下载的链接；
            //格式： http://私有空间绑定的域名/空间下的文件名
//            String targetUrl = "http://私有空间绑定的域名/下载文件名称.后缀";
            new QiUtil().upload(FilePath,fileName);
        }

    }

